package java学习.第06章_面向对象编程_基础;

/**
 * ClassName: C_变量的分类
 * Package: java学习.第06章_面向对象编程_基础
 * Description:
 *
 * @Author 张蛟龙
 * @Create 2023/3/4 17:10
 * @Version 1.0
 */

class 变量 {

    /**
     * 类的定义
     * 类的定义使用关键字：class。格式如下：
     *
     * [修饰符] class 类名{
     * 	    属性声明;(变量声明)
     *     方法声明;
     * }
     *
     */

    public static void main(String[] args) {
        new Person().eat();
        new Person().sleep(5);//5就是实参

        //对象数组 类似于String
        Person[] people = new Person[5];//用的时候  记得要 new
        System.out.println(people[0]);//空指针异常

    }
}

class Person{
    /**
     * 属性 <=>成员变量<=>field<=>字段 域
     * 变量的分类：
     *  角度一：  按照类型来分
     *      基本数据类型 只有值
     *      引用数据类型 有地址
     *  角度二：   按照变量在类中声明的位置不同
     *      成员变量
     *      局部变量
     *
     * 栈： 方法中对应的变量名
     * 堆：new 出来的对象 包括属性
     * 方法区：存放类的模板
     *
     *  成员变量 ：他是随着对象创建而创建的，所以属性在"堆"里面 有默认值
     *  局部变量 ：调用方法时才创建 所以在 "栈"里面   没有默认值
     */
    protected String name; //属性 成员变量
    private int age;//可以不用显示的赋值  有默认值

    /**
     * 方法
     * 方法是类或对象行为特征的抽象，用来完成某个功能操作。
     *      在某些语言中也称为函数或过程。
     * 将功能封装为方法的目的是，可以实现代码重用，减少冗余，简化代码
     * Java里的方法不能独立存在，所有的方法必须定义在类里。
     *
     * 举例1：
     *      Math.random()的random()方法
     *      Math.sqrt(x)的sqrt(x)方法
     *
     *  一个完整的方法 = 方法头 + 方法体。
     *  []:表示  0~n 个
     *  方法头：
     *      权限修饰符 [其他修饰符] 返回值类型 方法名([形参列表]) [throws 异常类型]
     *      {
     *          //方法体
     *      }
     *   权限修饰符: private  (缺省)  protected   public
     *   其他修饰符: static   synchronized
     *   返回值类型: void     (基本数据类型)  (引用数据类型)  需要 return 返回值;
     *   方法名:    就是调用的名字  最好见名知意
     *   形参列表:   类型1 类型名1;类型2 类型名2;....类型n 类型名n;
     *   异常类型:   一个程序出现异常就会停止，但是这个可以讲程序返回给调用者
     *
     *   方法体：真正执行的程序
     *
     * return：  结束一个方法
     *           结束一个方法并将结果返回给调用者
     *        注意：return 之后不能执行语句
     */
    public void eat()/*方法头*/{// 括号内 ：方法体

        //局部变量  调用方法时才创建 所以在 栈里面
        String food = "烩面";//必须显示的赋值
        System.out.println(name + "吃" + food);
    }

    public void sleep(int a){//形参a
        System.out.println("a:" + a);
    }


}

/**
 * 权限修饰符  类内部   同一个包   不同包的子类   同一个工程
 * private   Yes
 * (缺省)     Yes      Yes
 * protected Yes      Yes       Yes
 * public    Yes      Yes       Yes          Yes
 *
 * 修饰类   只能  （缺省）和public
 * 可以修饰    属性，方法，构造器，内部类
 *  修饰类：   缺省，public
 *
 */
class 权限修饰符{

}
